﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using DingApi.Models;
using System.Data;

using System.Web;
using Dingding.Helper;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;


namespace DingApi.Controllers
{
    [RoutePrefix("api/Paef12")]
    public class Paef12Controller : ApiController
    {

        [HttpPost]
        [Route("PostPaef12_Inq")]
        // 与 PostPaef21_Inq 功能类似，有库区权限限制，去除数量为0的记录
        public System.Data.DataSet PostPaef12_Inq([FromBody]  JObject obj)
        {
            EI.EIInfo inBlock = new EI.EIInfo();

            string company_code = obj["COMPANY_CODE"] == null ? " " : obj["COMPANY_CODE"].ToString();
            string branch_code = obj["BRANCH_CODE"] == null ? " " : obj["BRANCH_CODE"].ToString();
            string stock_no = obj["STOCK_NO"] == null ? " " : obj["STOCK_NO"].ToString();
            string pa_location_no = obj["PA_LOCATION_NO"] == null ? " " : obj["PA_LOCATION_NO"].ToString();
            string asmat_no = obj["ASMAT_NO"] == null ? " " : obj["ASMAT_NO"].ToString();
            string asmat_name = obj["ASMAT_NAME"] == null ? " " : obj["ASMAT_NAME"].ToString();
            string spec = obj["SPEC"] == null ? " " : obj["SPEC"].ToString();
            string asmat_big_type = obj["ASMAT_BIG_TYPE"] == null ? " " : obj["ASMAT_BIG_TYPE"].ToString();
            string userid = obj["USERID"] == null ? " " : obj["USERID"].ToString();


            inBlock.Tables[0].Columns.Add("COMPANY_CODE");
            inBlock.Tables[0].Columns.Add("BRANCH_CODE");
            inBlock.Tables[0].Columns.Add("STOCK_NO"); //后台必须的字段；
            inBlock.Tables[0].Columns.Add("PA_LOCATION_NO");
            inBlock.Tables[0].Columns.Add("ASMAT_NO");
            inBlock.Tables[0].Columns.Add("ASMAT_NAME");
            inBlock.Tables[0].Columns.Add("SPEC");
            inBlock.Tables[0].Columns.Add("ASMAT_BIG_TYPE");



            inBlock.Tables[0].Rows.Add();
            inBlock.sys_info.company_code   = "LT";
            inBlock.sys_info.userid         = userid;


            inBlock.Tables[0].Rows[0]["COMPANY_CODE"] = company_code;
            inBlock.Tables[0].Rows[0]["BRANCH_CODE"] = branch_code;


            inBlock.Tables[0].Rows[0]["PA_LOCATION_NO"] = pa_location_no;
            inBlock.Tables[0].Rows[0]["STOCK_NO"] = stock_no;
            inBlock.Tables[0].Rows[0]["ASMAT_NO"] = asmat_no;
            inBlock.Tables[0].Rows[0]["ASMAT_NAME"] = asmat_name;


            inBlock.Tables[0].Rows[0]["SPEC"] = spec;
            inBlock.Tables[0].Rows[0]["ASMAT_BIG_TYPE"] = asmat_big_type;




            EI.EIInfo outBlock = EI.EITuxedo.CallService("paef21_inq", inBlock);

            outBlock.Tables[0].Columns.Add("STOCK_NO_DESC");



            string sql_str1 = "select STOCK_NO CODE, STOCK_NAME CODE_DESC_1_CONTENT ,BRANCH_CODE  from tsimm01 where STOCK_TYPE='A'  ";

            //仓库代码转换
            EI.EIInfo outBlock_TEMP = EF.Utility.ExecQuery(sql_str1);


            sql_str1 = " select  t.STOCK_NO CODE ";
           // sql_str1 += " ,t.stock_name   CODE_DESC_1_CONTENT ,BRANCH_CODE ";
            sql_str1 += "   from tsimm01 t,tsimm04 tt  ";
            sql_str1 += "    WHERE t.stock_no = tt.stock_no ";
            sql_str1 += "   and tt.staff_id = '" + userid + "' ";
            sql_str1 += "   and  t.STOCK_TYPE='A'";

            EI.EIInfo outBlock2 = EF.Utility.ExecQuery(sql_str1);

            //仓库授权
            EI.EIInfo outBlock_TEMP2 = EF.Utility.ExecQuery(sql_str1);



            DataTable dtTemp = null;


            for (int i = outBlock.Tables[0].Rows.Count - 1; i >= 0; i--)
            {  


                if (double.Parse(outBlock.Tables[0].Rows[i]["QUANTITY"].ToString())<=0)
                {
                    outBlock.Tables[0].Rows.RemoveAt(i);
                    continue;                    
                }

               
                string STOCK_NO = outBlock.Tables[0].Rows[i]["STOCK_NO"].ToString().Trim();
                if (STOCK_NO.Trim() != "")
                {
                    //仓库代码转换 
                    dtTemp = outBlock_TEMP.Tables[0].Select("CODE  = '" + STOCK_NO + "'").CopyToDataTable<DataRow>();

                    if (dtTemp != null && dtTemp.Rows.Count == 1)
                        outBlock.Tables[0].Rows[i]["STOCK_NO_DESC"] = dtTemp.Rows[0]["CODE_DESC_1_CONTENT"];

                    int d = outBlock_TEMP2.Tables[0].Select("CODE  = '" + STOCK_NO + "'").Count<DataRow>();
                                      
                    //无权限；
                    if (d==1)
                    {
                        outBlock.Tables[0].Rows[i]["COMPANY_CNAME"] = "T";
                    }
                    else
                    {
                        outBlock.Tables[0].Rows[i]["COMPANY_CNAME"] = "F";
                    }


                }
                   

                //借用COMPANY_CNAME	，若仓库无权限，则前台设置为不可编辑属性







            }










            outBlock.Tables[0].TableName = "Table0";









            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);            
            return outBlock;


        }



        //高级查询的查询条件获取，【主要是各类小代码，类似之前画面的初始化参数】
        [HttpPost]
        [Route("PostPaef12_Load")]
        public System.Data.DataSet PostPaef12_Load([FromBody]  JObject obj)
        {

           

            //二级库维护记录中所有设计到的分公司
            string sql_str1  =  "select CODE,CODE_DESC_1_CONTENT from tep0002 where code_class = 'FIBR'   ";
            sql_str1        +=  "and code  in (select BRANCH_CODE from tsimm01 where STOCK_TYPE='A') ";
             
            EI.EIInfo outBlock = EF.Utility.ExecQuery(sql_str1);

            DataRow dr3 = outBlock.Tables[0].NewRow();
            dr3["CODE"] = " ";
            dr3["CODE_DESC_1_CONTENT"] = " ";
            outBlock.Tables[0].Rows.InsertAt(dr3, 0);

            outBlock.Tables[0].TableName = "BRANCH_CODE";


            string userid = obj["USERID"] == null ? " " : obj["USERID"].ToString();


            sql_str1 = " select  t.STOCK_NO CODE ";
            sql_str1 += " ,t.stock_name   CODE_DESC_1_CONTENT ,BRANCH_CODE "   ;
            sql_str1 += "   from tsimm01 t,tsimm04 tt  "                        ;
            sql_str1 += "    WHERE t.stock_no = tt.stock_no "                   ;
            sql_str1 += "   and tt.staff_id = '"   +   userid  +   "' "        ;
            sql_str1 += "   and  t.STOCK_TYPE='A'"                             ;

            EI.EIInfo outBlock2 = EF.Utility.ExecQuery(sql_str1);
            

            outBlock2.Tables[0].TableName = "STOCK_NO";


            outBlock.Tables.Add(outBlock2.Tables[0].Copy());  




            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }


        //出库，出库实绩新增 + 出库确认。
        [HttpPost]
        [Route("PostPaef12_save")]       
        public System.Data.DataSet PostPaef12_save([FromBody]  JObject obj)
        {


            //obj对象区分大小写的； obj["ASMAT_NAME"] 报错。
            EI.EIInfo inBlock = new EI.EIInfo();


             

            inBlock.Tables[0].Columns.Add("COMPANY_CODE");
            inBlock.Tables[0].Columns.Add("ASMAT_NO");
            inBlock.Tables[0].Columns.Add("STOCK_NO");
            inBlock.Tables[0].Columns.Add("ASMAT_BIG_TYPE");
            inBlock.Tables[0].Columns.Add("ASMAT_BIG_NAME");
            inBlock.Tables[0].Columns.Add("ASMAT_SMALL_TYPE");
            inBlock.Tables[0].Columns.Add("ASMAT_SMALL_NAME");

            //出库实绩需要带出
            inBlock.Tables[0].Columns.Add("LOCATION_NAME");            
            inBlock.Tables[0].Columns.Add("BRANCH_CODE");
            inBlock.Tables[0].Columns.Add("ASMAT_NAME");
            inBlock.Tables[0].Columns.Add("SPEC");
            inBlock.Tables[0].Columns.Add("UNIT");
            inBlock.Tables[0].Columns.Add("ASSIST_UNIT");

           


            

            //出库实绩
            inBlock.Tables[0].Columns.Add("QUANTITY");
            inBlock.Tables[0].Columns.Add("ASSIST_NUM");
            inBlock.Tables[0].Columns.Add("USE_PLACE");
            inBlock.Tables[0].Columns.Add("CODE_DESC_1_NAME");
            inBlock.Tables[0].Columns.Add("DPTMENT_CODE");
            inBlock.Tables[0].Columns.Add("DEPT_CODE");
            inBlock.Tables[0].Columns.Add("PERSON_LINYONG");



            

            //钉钉操作标识；一步完成；
            inBlock.Tables[0].Columns.Add("ARCHIVE_FLAG");
                      
          

            inBlock.Tables[0].Rows.Add();
            inBlock.Tables[0].Rows[0]["COMPANY_CODE"] = obj["COMPANY_CODE"] == null ? " " : obj["COMPANY_CODE"].ToString();
            inBlock.Tables[0].Rows[0]["ASMAT_NO"] = obj["ASMAT_NO"] == null ? " " : obj["ASMAT_NO"].ToString();
            inBlock.Tables[0].Rows[0]["STOCK_NO"] = obj["STOCK_NO"] == null ? " " : obj["STOCK_NO"].ToString();
            inBlock.Tables[0].Rows[0]["ASMAT_BIG_TYPE"] = obj["ASMAT_BIG_TYPE"] == null ? " " : obj["ASMAT_BIG_TYPE"].ToString();
            inBlock.Tables[0].Rows[0]["ASMAT_BIG_NAME"] = obj["ASMAT_BIG_NAME"] == null ? " " : obj["ASMAT_BIG_NAME"].ToString();
            inBlock.Tables[0].Rows[0]["ASMAT_SMALL_TYPE"] = obj["ASMAT_SMALL_TYPE"] == null ? " " : obj["ASMAT_SMALL_TYPE"].ToString();
            inBlock.Tables[0].Rows[0]["ASMAT_SMALL_NAME"] = obj["ASMAT_SMALL_NAME"] == null ? " " : obj["ASMAT_SMALL_NAME"].ToString();
            
            inBlock.Tables[0].Rows[0]["BRANCH_CODE"] = obj["BRANCH_CODE"] == null ? " " : obj["BRANCH_CODE"].ToString();
            inBlock.Tables[0].Rows[0]["LOCATION_NAME"] = obj["LOCATION_NAME"] == null ? " " : obj["LOCATION_NAME"].ToString();
            inBlock.Tables[0].Rows[0]["ASMAT_NAME"] = obj["ASMAT_NAME"] == null ? " " : obj["ASMAT_NAME"].ToString();
            inBlock.Tables[0].Rows[0]["SPEC"] = obj["SPEC"] == null ? " " : obj["SPEC"].ToString();
            inBlock.Tables[0].Rows[0]["UNIT"] = obj["UNIT"] == null ? " " : obj["UNIT"].ToString();
            inBlock.Tables[0].Rows[0]["ASSIST_UNIT"] = obj["ASSIST_UNIT"] == null ? " " : obj["ASSIST_UNIT"].ToString();


            inBlock.Tables[0].Rows[0]["QUANTITY"]       = obj["QUANTITY"] == null ? " " : obj["QUANTITY"].ToString();
            inBlock.Tables[0].Rows[0]["ASSIST_NUM"]     = obj["ASSIST_NUM"] == null ? " " : obj["ASSIST_NUM"].ToString();
            inBlock.Tables[0].Rows[0]["USE_PLACE"] = obj["USE_PLACE"] == null ? " " : obj["USE_PLACE"].ToString();
            inBlock.Tables[0].Rows[0]["DPTMENT_CODE"] = obj["DPTMENT_CODE"] == null ? " " : obj["DPTMENT_CODE"].ToString();
            inBlock.Tables[0].Rows[0]["DEPT_CODE"] = obj["DEPT_CODE"] == null ? " " : obj["DEPT_CODE"].ToString();
            inBlock.Tables[0].Rows[0]["PERSON_LINYONG"] = obj["PERSON_LINYONG"] == null ? " " : obj["PERSON_LINYONG"].ToString();
            
            
            //判断是web手机钉钉，还是winform程序；
            inBlock.Tables[0].Rows[0]["ARCHIVE_FLAG"] = obj["ARCHIVE_FLAG"] == null ? " " : obj["ARCHIVE_FLAG"].ToString();
            
                




            string srv = obj["SRV"] == null ? " " : obj["SRV"].ToString();
          
 
            EI.EIInfo inBlock2 = new EI.EIInfo();
            inBlock2.sys_info.company_code = "LT";
            inBlock2.sys_info.company_name = "龙腾特钢";

            inBlock2.sys_info.userid = obj["USERID"].ToString();
            inBlock2.sys_info.username = obj["USERNAME"].ToString();
            inBlock2.sys_info.formname = obj["FORMNAME"].ToString();

             
            inBlock2.Tables[0].Merge(inBlock.Tables[0].Copy());

            inBlock2.Tables[0].TableName = "INS";

             


            EI.EIInfo outBlock = EI.EITuxedo.CallService("paef12_save", inBlock2);
                     
            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;

        }

    }
}